﻿using System;
using Scommesse.Model;
using Scommesse.View.Admin;

namespace Scommesse.Presenters.Admin
{
    class CompetizionePresenter : ICompetizionePresenter
    {
        private readonly CompetizioneDialog _competizioneDialog;
        private readonly Palinsesto _palinsesto;

        public CompetizionePresenter(CompetizioneDialog dialog)
        {
            _competizioneDialog = dialog;
            _competizioneDialog.AddListener(this);
            _palinsesto = Palinsesto.GetPalinsesto();
            _competizioneDialog.ShowDialog();
        }

        public void Load_View()
        {
            _competizioneDialog.StartDate = DateTime.Today;
            _competizioneDialog.FinishDate = DateTime.Today;
            _competizioneDialog.CompEsistente = false;

            foreach (Categoria cat in _palinsesto.Categorie)
                _competizioneDialog.SetCategoria = cat.Nome;
        }

        public void ConfermaAggiungiCompetizione()
        {
            _competizioneDialog.CompEsistente = false;
            String nomeCompetizione = String.Empty;
            String nomeCategoria = String.Empty;
            DateTime dInizio = _competizioneDialog.StartDate;
            DateTime dFine = _competizioneDialog.FinishDate;

            if (dInizio.CompareTo(dFine) >= 0)
                _competizioneDialog.DataError = "La data di inizio è successiva a quella di fine";

            nomeCompetizione = _competizioneDialog.NomeCompetizione;
            if (String.IsNullOrEmpty(nomeCompetizione))
                _competizioneDialog.CompetizioneError = "Inserisci il nome della competizione";

            try
            {
                nomeCategoria = _competizioneDialog.NomeCategoria;
            }
            catch
            {
                _competizioneDialog.CategoriaError = "Seleziona una categoria";
            }

            if (!String.IsNullOrEmpty(nomeCompetizione) && !String.IsNullOrEmpty(nomeCategoria) &&
                dInizio.CompareTo(dFine) < 0)

                AggiungiCompetizione(nomeCompetizione, dInizio, dFine, nomeCategoria);        
        }

        public void AggiungiCompetizione(string nome, DateTime dataInizio, DateTime dataFine, String nomeCategoria)
        {
            try
            {
                ICategoria cat = _palinsesto.GetCategoriaByName(nomeCategoria);
                if (cat != null)
                {
                    cat.AddCompetizione(nome, dataInizio, dataFine);
                    //DataSaver.SavePalinsestoOnFile(_palinsesto);
                }

                _competizioneDialog.Close();
            }
            catch
            {
                _competizioneDialog.CompEsistente = true;
            }           
        }
    }
}
